#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
微信自动回复工具命令行界面
"""

import argparse
import sys
import os
import json
import time
import threading
from pathlib import Path

# 添加itchat导入
try:
    import itchat
    from itchat.content import TEXT
except ImportError as e:
    print("❌ 缺少微信机器人依赖，请安装itchat库")
    print("请运行: pip install itchat")
    sys.exit(1)

# 设置输出编码
if hasattr(sys.stdout, 'reconfigure'):
    sys.stdout.reconfigure(encoding='utf-8')
if hasattr(sys.stderr, 'reconfigure'):
    sys.stderr.reconfigure(encoding='utf-8')


def get_executable_dir():
    """获取当前执行文件的目录"""
    if getattr(sys, 'frozen', False):
        # 如果是打包后的exe文件
        return Path(sys.executable).parent
    else:
        # 如果是Python脚本
        return Path(os.getcwd())


def resolve_input_path(path_str, base_dir):
    """解析输入路径，相对于执行文件目录"""
    input_path = Path(path_str)
    if input_path.is_absolute():
        return input_path
    else:
        return base_dir / input_path


def create_parser():
    """创建命令行参数解析器"""
    parser = argparse.ArgumentParser(
        description="💬 微信自动回复工具 - 自动回复微信消息",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  # 启动图形界面
  python -m wechat_auto_reply --gui
  
  # 使用配置文件启动自动回复
  python -m wechat_auto_reply -c config.json
  
  # 设置默认回复和延迟
  python -m wechat_auto_reply -d "您好，稍后回复" -t 3
        """
    )
    
    # 配置文件选项
    parser.add_argument(
        "-c", "--config", 
        type=str, 
        help="配置文件路径 (JSON格式)"
    )
    
    # 默认回复内容
    parser.add_argument(
        "-d", "--default-reply", 
        type=str, 
        help="默认回复内容"
    )
    
    # 回复延迟
    parser.add_argument(
        "-t", "--delay", 
        type=int, 
        help="回复延迟(秒)",
        default=2
    )
    
    # GUI模式选项
    parser.add_argument(
        "--gui", 
        action="store_true",
        help="启动图形界面模式"
    )
    
    # 版本信息
    parser.add_argument(
        "-v", "--version", 
        action="version", 
        version="微信自动回复工具 v1.0.0"
    )
    
    return parser


def load_config(config_path):
    """加载配置文件"""
    try:
        with open(config_path, "r", encoding="utf-8") as f:
            return json.load(f)
    except Exception as e:
        print(f"❌ 加载配置文件失败: {e}")
        return None


def start_auto_reply(config):
    """启动自动回复"""
    default_reply = config.get("default_reply", "您好，我已经收到您的消息，稍后会回复您。")
    reply_delay = config.get("reply_delay", 2)
    rules = {rule["keyword"]: rule["reply"] for rule in config.get("rules", [])}
    
    if not rules:
        print("❌ 请在配置文件中添加至少一条回复规则")
        return False
    
    print(f"🔄 启动微信自动回复...")
    print(f"   默认回复: {default_reply}")
    print(f"   回复延迟: {reply_delay}秒")
    print(f"   回复规则数量: {len(rules)}")
    print("   按 Ctrl+C 停止自动回复")
    print()
    
    # 定义消息处理函数
    def text_reply(msg):
        # 获取消息内容
        received_message = msg['Text']
        from_user = msg['FromUserName']
        
        # 查找匹配的回复规则
        reply_content = None
        for keyword, reply in rules.items():
            if keyword in received_message:
                reply_content = reply
                break
        
        # 如果没有匹配的规则，使用默认回复
        if not reply_content:
            reply_content = default_reply
        
        # 延迟回复
        time.sleep(reply_delay)
        
        # 发送回复
        itchat.send(reply_content, toUserName=from_user)
        
        # 打印日志
        print(f"📥 收到消息: {received_message}")
        print(f"📤 自动回复: {reply_content}")
        print()
    
    # 注册消息处理函数
    itchat.msg_register(TEXT)(text_reply)
    
    try:
        # 登录微信
        print("请在手机上扫码登录微信...")
        itchat.auto_login(hotReload=True, statusStorageDir='wechat_status.pkl')
        print("微信登录成功，开始监听消息...")
        
        # 开始监听消息
        itchat.run()
                
    except KeyboardInterrupt:
        print("\n⏹️  自动回复已停止")
        try:
            itchat.logout()
        except:
            pass
        return True
    except Exception as e:
        print(f"❌ 自动回复过程出错: {e}")
        return False


def main():
    """主函数"""
    parser = create_parser()
    args = parser.parse_args()
    
    # 获取执行文件目录
    base_dir = get_executable_dir()
    
    # 如果指定了GUI模式或者没有参数，则启动GUI
    if args.gui or len(sys.argv) == 1:
        try:
            from .gui import main as gui_main
        except ImportError:
            try:
                from gui import main as gui_main
            except ImportError:
                print("❌ GUI模块不可用")
                return 1
        
        print("🎨 启动图形界面...")
        gui_main()
        return 0
    
    # 处理命令行模式
    config = {
        "default_reply": "您好，我已经收到您的消息，稍后会回复您。",
        "reply_delay": 2,
        "rules": []
    }
    
    # 如果指定了配置文件
    if args.config:
        loaded_config = load_config(args.config)
        if loaded_config is None:
            return 1
        config.update(loaded_config)
    
    # 如果指定了默认回复
    if args.default_reply:
        config["default_reply"] = args.default_reply
    
    # 如果指定了延迟
    if args.delay:
        config["reply_delay"] = args.delay
    
    # 启动自动回复
    success = start_auto_reply(config)
    return 0 if success else 1


if __name__ == "__main__":
    sys.exit(main())